home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gigarom 1
/
Gigarom Macintosh Archives (Quantum Leap)(CDRM1080320)(1993).iso
/
FILES
/
DEV
/
A-B
/
add images.cpt
/
HandleTheMenus.c
< prev
next >
Wrap
Text File
|
1989-06-22
|
10KB
|
432 lines
/* =======================================
File: HandleTheMenus.c
Function: Handle any menu selections.
History: 4/27/89 Original by Prototyper.
4/27/89 modified by c. keith ray
====================================== */
#include "HandleTheMenus.h"
/* *********************************** */
/* These are the other includes for general routines */
/* #include <colortoolbox.h> */
#include <Strings.h>
#include <IM1_5Protos.h> /* includes every-mac-thing that THINK has defined */
#include "color_transfer_modes.h"
extern char *strcpy (Str255 *, char *); /* LSC string prototype */
/* *********************************** */
#define TRUE 1
#define FALSE 0
#define NIL 0
#define ABS(x) ( (x) < 0 ? -(x) : (x) )
/* *********************************** */
/* External routines that are called */
#include "about_alert.h"
#include "Source_2.h"
#include "Source_1.h"
#include "Result.h"
extern WindowPtr Result_Window;
extern WindowPtr proton_Window;
extern WindowPtr flourine_Window;
extern MenuHandle AppleMenu;
extern MenuHandle FileMenu;
extern MenuHandle EditMenu;
extern MenuHandle ModeMenu;
extern short pix_zoom;
extern short clipboard_empty;
extern short add_mode;
extern short src_changed;
/* menus-lists and menu-items that change depending on window, zoom, or clipboard */
/* Item_Open_Pict */
/* Item_Close */
/* Item_Save_Pict */
/* Item_Magnify */
/* Item_Reduce */
/* Item_Undo */
/* Item_Cut */
/* Item_Copy */
/* Item_Paste */
/* Item_Clear */
/* Item_Select_All */
/* Item_Crop */
/* List_Mode */
void Update_Menus( tempWindow )
WindowPtr tempWindow;
{
if ( tempWindow != NIL )
/* test if no windows in front - which should be impossible for this program */
{
if ( tempWindow == proton_Window )
{
EnableItem( FileMenu, Item_Open_Pict );
DisableItem( FileMenu, Item_Close );
DisableItem( FileMenu, Item_Save_Pict );
if ( pix_zoom == 1 )
{
EnableItem (FileMenu, Item_Magnify);
DisableItem (FileMenu, Item_Reduce); /* disable reduce menu */
}
else if (pix_zoom == 8)
{
DisableItem (FileMenu, Item_Magnify); /* disable magnify menu */
EnableItem (FileMenu, Item_Reduce);
}
else
{
EnableItem (FileMenu, Item_Magnify); /* enable magnify menu */
EnableItem (FileMenu, Item_Reduce);
}
DisableItem(EditMenu, Item_Undo);
DisableItem(EditMenu, Item_Cut);
DisableItem(EditMenu, Item_Copy);
if ( clipboard_empty == TRUE )
{
DisableItem(EditMenu, Item_Paste);
}
else
{
EnableItem(EditMenu, Item_Paste);
}
EnableItem(EditMenu, Item_Crop);
EnableItem( ModeMenu , 0);
}
else if ( tempWindow == flourine_Window )
{
EnableItem( FileMenu, Item_Open_Pict );
DisableItem( FileMenu, Item_Close );
DisableItem( FileMenu, Item_Save_Pict );
if ( pix_zoom == 1 )
{
EnableItem (FileMenu, Item_Magnify);
DisableItem (FileMenu, Item_Reduce); /* disable reduce menu */
}
else if (pix_zoom == 8)
{
DisableItem (FileMenu, Item_Magnify); /* disable magnify menu */
EnableItem (FileMenu, Item_Reduce);
}
else
{
EnableItem (FileMenu, Item_Magnify); /* enable magnify menu */
EnableItem (FileMenu, Item_Reduce);
}
DisableItem(EditMenu, Item_Undo);
DisableItem(EditMenu, Item_Cut);
DisableItem(EditMenu, Item_Copy);
if ( clipboard_empty == TRUE )
{
DisableItem(EditMenu, Item_Paste);
}
else
{
EnableItem(EditMenu, Item_Paste);
}
EnableItem(EditMenu, Item_Crop);
EnableItem( ModeMenu , 0);
}
else if ( tempWindow == Result_Window )
{
DisableItem( FileMenu, Item_Open_Pict );
DisableItem( FileMenu, Item_Close );
EnableItem( FileMenu, Item_Save_Pict );
if ( pix_zoom == 1 )
{
EnableItem (FileMenu, Item_Magnify);
DisableItem (FileMenu, Item_Reduce); /* disable reduce menu */
}
else if (pix_zoom == 8)
{
DisableItem (FileMenu, Item_Magnify); /* disable magnify menu */
EnableItem (FileMenu, Item_Reduce);
}
else
{
EnableItem (FileMenu, Item_Magnify); /* enable magnify menu */
EnableItem (FileMenu, Item_Reduce);
}
DisableItem(EditMenu, Item_Undo);
EnableItem(EditMenu, Item_Cut);
EnableItem(EditMenu, Item_Copy);
DisableItem(EditMenu, Item_Paste);
EnableItem(EditMenu, Item_Crop);
EnableItem( ModeMenu , 0);
}
else /* desk accessory in front */
{
DisableItem( FileMenu, Item_Open_Pict );
EnableItem( FileMenu, Item_Close );
DisableItem( FileMenu, Item_Save_Pict );
DisableItem (FileMenu, Item_Magnify);
DisableItem (FileMenu, Item_Reduce); /* disable reduce menu */
EnableItem(EditMenu, Item_Undo);
EnableItem(EditMenu, Item_Cut);
EnableItem(EditMenu, Item_Copy);
if ( clipboard_empty == TRUE )
{
DisableItem(EditMenu, Item_Paste);
}
else
{
EnableItem(EditMenu, Item_Paste);
}
DisableItem(EditMenu, Item_Crop);
DisableItem( ModeMenu , 0);
}
}
}
void HandleMenu (doneFlag, theMenu, theItem, theInput)
char *doneFlag;
short theMenu, theItem;
TEHandle *theInput;
{
GrafPtr SavePort;
Str255 DAName;
short DNA; /* DA selection ID */
char BoolHolder; /* Boolean used in handling edit commands */
WindowPeek da_window;
switch (theMenu)
{
case List_Apple:
switch (theItem)
{
case Item_About_Add_Images:
A_about_alert ();
break;
default: /* Handle the DAs */
GetPort (&SavePort);
GetItem (AppleMenu, theItem, (char *)&DAName);
DNA = OpenDeskAcc ((char *)&DAName);
SetPort (SavePort);
break;
}
break;
case List_File:
switch (theItem)
{
case Item_Open_Pict:
/* ?? ADD IN HERE WHAT THIS ITEM SHOULD DO
-- check to see if proton or flourine is on top
-- if one of them is, then My_Read_Image() for that window
*/
if ( FrontWindow() == flourine_Window )
{
read_flourine();
}
else if ( FrontWindow() == proton_Window )
{
read_proton();
}
break;
case Item_Close: /* assume that update_menus etc. prevents us from trying to close normal windows */
da_window = (WindowPeek) ( FrontWindow() );
CloseDeskAcc ( (*da_window).windowKind);
break;
case Item_Save_Pict:
/* ?? ADD IN HERE WHAT THIS ITEM SHOULD DO
-- check to see if Result is on top, if it is,
-- then My_Write_Image()
*/
save_result();
break;
case Item_Magnify:
pix_zoom *= 2; /* multiply zoom factor by 2 */
UpDate_Result(Result_Window); /* force redraw at new magnification */
UpDate_proton(proton_Window);
UpDate_flourine(flourine_Window);
break;
case Item_Reduce:
pix_zoom /= 2; /* divide zoom factor by 2 */
UpDate_Result(Result_Window); /* force redraw at new magnification */
UpDate_proton(proton_Window);
UpDate_flourine(flourine_Window);
break;
case Item_Quit:
*doneFlag = TRUE; /* Set exit the program flag */
break;
default:
break;
}
break;
case List_Edit:
BoolHolder = SystemEdit (theItem - 1); /* Do DA editing */
if (BoolHolder == FALSE) /* If not a DA then we get it */
{
switch (theItem)
{
case Item_Undo:
break;
case Item_Cut:
if ( FrontWindow() == Result_Window )
{
cut_result();
}
break;
case Item_Copy:
if ( FrontWindow() == Result_Window )
{
copy_result();
}
break;
case Item_Paste:
if ( FrontWindow() == proton_Window )
{
paste_proton();
}
else if ( FrontWindow() == flourine_Window )
{
paste_flourine();
}
break;
case Item_Clear:
if ( FrontWindow() == Result_Window )
{
/* clear both source images */
clear_flourine();
clear_proton();
clear_result();
}
else if ( FrontWindow() == proton_Window )
{
/* clear source 1 image */
clear_proton();
}
else if ( FrontWindow() == flourine_Window )
{
/* clear souce 2 image */
clear_flourine();
}
break;
case Item_Select_All:
break;
case Item_Crop:
/*
this is supposed to trim the result & source images to be the
size of the window's displayable area.
*/
break;
default:
break;
}
}
break;
case List_Mode:
do_checkmark( ModeMenu, theItem, Item_Add_Over, Item_Exclusive_Or_Invert);
switch (theItem)
{
case Item_Add_Over:
add_mode = addOver;
break;
case Item_Add_Pin:
add_mode = addPin;
break;
case Item_Sub_Over:
add_mode = subOver;
break;
case Item_Sub_Pin:
add_mode = subPin;
break;
case Item_Maximum:
add_mode = adMax;
break;
case Item_Minimum:
add_mode = adMin;
break;
case Item_Blend:
add_mode = blend;
break;
case Item_Transparent:
add_mode = transparent;
break;
case Item_Copy_Mode:
add_mode = srcCopy;
break;
case Item_Copy_Invert:
add_mode = notSrcCopy;
break;
case Item_Or:
add_mode = srcOr;
break;
case Item_Or_Invert:
add_mode = notSrcOr;
break;
case Item_Change_Black:
add_mode = srcBic;
break;
case Item_Change_Black_Invert:
add_mode = notSrcBic;
break;
case Item_Exclusive_Or:
add_mode = srcXor;
break;
case Item_Exclusive_Or_Invert:
add_mode = notSrcXor;
break;
default:
break;
}
src_changed = TRUE; /* force updating the contents of the result window */
UpDate_Result(Result_Window);
break;
default:
break;
}
HiliteMenu (0); /* Turn menu selection off*/
}
void do_checkmark( menuh, item, groupstart, groupend)
MenuHandle menuh;
short item, groupstart, groupend;
/* a utility-function to handle a check-mark-group in any menu */
{
short i;
for (i = groupstart; i < groupend; i++)
{
if ( i == item)
{
CheckItem(menuh, i, true);
}
else
{
CheckItem(menuh, i, false);
}
}
}